package models

import (
	"gorm.io/gorm"
)

// Config 系统配置表
type Config struct {
	ID          uint   `gorm:"primaryKey" json:"id"`
	ConfigKey   string `gorm:"column:config_key;uniqueIndex;size:255;not null" json:"config_key"`
	ConfigValue string `gorm:"column:config_value;type:text" json:"config_value"`
	Desc        string `gorm:"column:desc;size:500" json:"desc"`
	gorm.Model
}

// TableName 指定表名
func (Config) TableName() string {
	return "tb_config"
}

// AppConfig 应用配置结构
type AppConfig struct {
	// DNS配置
	DNS DNSConfig `json:"dns"`

	// 隧道配置
	Tunnel TunnelConfig `json:"tunnel"`

	// 域名路由配置
	DomainRouter DomainRouterConfig `json:"domain_router"`

	// 腾讯云配置
	Tencent TencentConfig `json:"tencent"`

	// JWT配置
	JWT JWTConfig `json:"jwt"`

	// 客户端配置
	Client ClientConfig `json:"client"`
}

// DNSConfig DNS配置
type DNSConfig struct {
	Enabled         bool   `json:"enabled"`
	Providers       string `json:"providers"`        // 支持的DNS提供商，逗号分隔
	DefaultProvider string `json:"default_provider"` // 默认DNS提供商
	Domain          string `json:"domain"`           // 主域名
	PublicIP        string `json:"public_ip"`        // 公网IP
}

// TunnelConfig 隧道配置
type TunnelConfig struct {
	PortRangeStart int `json:"port_range_start"` // 端口范围开始
	PortRangeEnd   int `json:"port_range_end"`   // 端口范围结束
}

// DomainRouterConfig 域名路由配置
type DomainRouterConfig struct {
	Enabled bool `json:"enabled"` // 是否启用域名路由
	Port    int  `json:"port"`    // 域名路由监听端口
}

// TencentConfig 腾讯云配置
type TencentConfig struct {
	SecretID  string `json:"secret_id"`
	SecretKey string `json:"secret_key"`
}

// JWTConfig JWT配置
type JWTConfig struct {
	Secret      string `json:"secret"`
	ExpireHours int    `json:"expire_hours"`
}

// ClientConfig 客户端配置
type ClientConfig struct {
	BaseURL        string `json:"base_url"`        // 客户端API基础URL
	TCPTunnelHost  string `json:"tcp_tunnel_host"` // TCP隧道主机
	TCPTunnelPort  int    `json:"tcp_tunnel_port"` // TCP隧道端口
	TimeoutSeconds int    `json:"timeout_seconds"` // 超时时间(秒)
	MockDelayMs    int    `json:"mock_delay_ms"`   // 模拟延迟(毫秒)
	DefaultDomain  string `json:"default_domain"`  // 默认域名
	AutoReconnect  bool   `json:"auto_reconnect"`  // 自动重连
}
